<?php
class Usuario_model extends CI_Model {
	const STR_NOMBRE_TABLA = 'usuario';
	const STR_NOMBRE_TABLA_CLIENTE = "cliente";
	const STR_NOMBRE_TABLA_PROVEEDOR = 'proveedor';
	const STR_NOMBRE_TABLA_PERFIL = 'perfil';
	const STR_NOMBRE_TABLA_USUARIO_PERFIL = "usuario_perfil";
	const STR_NOMBRE_TABLA_PERSONA = 'persona';
	const STR_NOMBRE_TABLA_PERSONA_NATURAL = "persona_natural";
	const STR_NOMBRE_TABLA_PERSONA_JURIDICA = "persona_juridica";
    const STR_NOMBRE_TABLA_SOLICITUD_USUARIO = "solicitud_usuario";
        
	function usuario_model() {
		parent::__construct ();
	}
	function login($username, $password) {
		/**
		 * 02/06/2015
		 * se modifico el query ya que estan muchas tablas amarradas a otras
		 * los datos se jalan de las tablas usuario_perfil (muchos a muchos)
		 * de la tabla solicitud_usuario de esta tabla se obtiene el username y el pass
		 * de la tabla perfil de la que obtenemos si el usuario es administrador, cliente o proveedor
		 * @author Leidy Uribe Marcos
		 */
		$this->db->select ( 'usuario.id_usuario as idusu, usuario.username as username, usuario.password as password, perfil.nombre as pernom, usuario_perfil.id_perfil as pe' );
		$this->db->from ( 'usuario_perfil, usuario, perfil' );
		$this->db->where ( 'usuario_perfil.id_usuario = usuario.id_usuario' );
		$this->db->where ( 'usuario_perfil.id_perfil = perfil.id_perfil' );
		$this->db->where ( 'usuario.username', $username );
		$this->db->where ( 'usuario.password', MD5 ( $password ) );
		$this->db->limit ( 1 );
		
		$query = $this->db->get ();
		
		if ($query->num_rows () == 1) {
			return $query->result ();
		} else {
			return false;
		}
	}
	
	/**buscando todos los usuarios que tengan el id de la persona que se envia
	 * @author Leidy Uribe Marcos */
	function getPersona($data){
		$porid = $this->db->query ( 'SELECT * FROM usuario WHERE id_persona = "' . $data ['idPersona'] . '"' );
		return $porid->result();
	}
	
	/**insertando en usuario los datos del usuario
	@author Leidy Uribe Marcos
	*/
	function insert($data) {
		$this->db->set ( 'username', $data ['usuario'] );
		$this->db->set ( 'password', MD5 ( $data ['password'] ) );
		$this->db->set ( 'usuario_registro', $data ['usuario_registro'] );
		$this->db->set ( 'fecha_registro', $data ['fecha_registro'] );
		$this->db->set ( 'id_estado', $data ['idEstado'] );
		$this->db->set ( 'id_solicitud_usuario', $data ['idSolUsuario'] );
		$this->db->set ( 'id_persona', $data ['idPersona'] );
		$this->db->insert ( 'usuario' );
	}
	
	/**
	 * metodo que permite insertar un proveedor
	 * 
	 * @author Leidy Uribe Marcos
	 */
	function insert_proveedor($data) {
		$this->db->set ( 'username', $data ['usuario'] );
		$this->db->set ( 'password', $data ['password'] );
		$this->db->set ( 'usuario_registro', $data ['usuario_registro'] );
		$this->db->set ( 'fecha_registro', $data ['fecha_registro'] );
		$this->db->set ( 'id_estado', $data ['idEstado'] );
		$this->db->set ( 'id_solicitud_usuario', $data ['idSolUsuario'] );
		$this->db->set ( 'id_persona', $data ['idPersona'] );
		$this->db->insert ( 'usuario' );
	}
	
	/**obteniendo el ultimo usuario registrado
	@author Leidy Uribe Marcos
	*/
	function getId() {
		$ultimo_id = $this->db->query ( 'SELECT * FROM usuario ORDER BY id_usuario DESC LIMIT 1' );
		return $ultimo_id->row_array ();
	}
	
	/**obtener el usuario dependiendo del id_solicitud_usuario
	 * @author Leidy Uribe Marcos*/
	function getUsuarioSol($data){
		$usu_solicitud = $this->db->query('SELECT * FROM usuario WHERE id_solicitud_usuario = "'.$data['idSolUsuario'].'"');
		return $usu_solicitud->row_array();
	}
	
	/**
	 * Selecciona todo del ultimo usuario registrado incluyendo de la tabla maestra
	 * @author Leidy uribe Marcos
	 */
	function getIdUsuario() {
		$ultimo_id = $this->db->query ( 'SELECT id_usuario, username, password, id_estado, 
				id_solicitud_usuario, id_persona, tabla_maestra.nombre AS estado
				FROM usuario, tabla_maestra
				WHERE usuario.id_estado = tabla_maestra.id_tabla_maestra
				ORDER BY id_usuario DESC LIMIT 1' );
		return $ultimo_id->row_array ();
	}
	
	/**
	 * en caso haya un cambio de contraseña este metodo volvera a encriptar la contraseña
	 * @author Leidy uribe Marcos
	 */
	function cambiar_pass($data){
		$this->db->set ( 'password', md5($data['password']));
		$this->db->where ( 'id_usuario', $data ['id_usuario'] );
		$this->db->where ( 'username', $data['username']);
		$this->db->update ( 'usuario' );
	}
	
	/**
	 * Obtiene el nombre o razon social tanto de un cliente como de un proveedor segun su nombre de usuario
	 * @author Leidy Uribe Marcos
	 */
	function getPorUsername($usuario) {
		$porusername = $this->db->query ( 'SELECT persona_natural.nombres AS nombre, persona_natural.apellidos AS apellidos
FROM usuario, persona_natural
WHERE persona_natural.id_persona = usuario.id_persona AND
usuario.username = "' . $usuario ['usuario'] . '"
union all
SELECT persona_juridica.razon_social AS razon,persona_juridica.ruc AS ruc
FROM usuario, persona_juridica
WHERE persona_juridica.id_persona = usuario.id_persona AND
usuario.username = "' . $usuario ['usuario'] . '"' );
		return $porusername->result ();
	}
	
	/**
	 * Obtiene la razon social de un proveedor segun su nombre de usuario
	 * @author Leidy Uribe Marcos
	 */
	function getPorProveedor($usuario) {
		$porusername = $this->db->query ( 'SELECT persona_juridica.razon_social AS razon
FROM usuario, persona_juridica
WHERE persona_juridica.id_persona = usuario.id_persona AND
usuario.username = "' . $usuario ['usuario'] . '"' );
		return $porusername->result ();
	}
	
	/**
	 * Selecciona todos los datos de usuario segun su nombre de usuario
	 * @author Leidy Uribe Marcos
	 */
	function getPorId($data) {
		$porid = $this->db->query ( 'SELECT * FROM usuario WHERE username = "' . $data ['usuario'] . '"' );
		return $porid->row_array ();
	}
	
	/**
	 * Metodo para llamar los datos del usuario mediante el id de usuario
	 *
	 * @author Leidy Uribe Marcos
	 */
	function getUsername($data) {
		$porid = $this->db->query ( 'SELECT * FROM usuario WHERE id_usuario = "' . $data ['id_usuario'] . '"' );
		return $porid->row_array ();
	}
	
	function getUsuario($data) {
		$usuario = $this->db->query('SELECT id_usuario, username, password, id_estado, 
				id_solicitud_usuario, id_persona, tabla_maestra.nombre AS estado
				FROM tabla_maestra, usuario
				WHERE usuario.id_estado = tabla_maestra.id_tabla_maestra  AND
				id_usuario = "'.$data['id_usuario'].'"');
		return $usuario->row_array();
	}
	
	/**
	 * Metodo para actualizar y colocar al estado de usuario como inactivo
	 *
	 * @author Leidy Uribe Marcos
	 */
	function updateUsuario($data) {
		$this->db->set ( 'id_estado', INT_ESTADO_INACTIVO );
		$this->db->where ( 'id_usuario', $data ['id_usuario'] );
		$this->db->update ( 'usuario' );
	}
	
	/**
	 * Metodo para actualizar los datos del usuario cliente no se haya modificado la contraseña
	 *
	 * @author Leidy Uribe Marcos
	 */
	function updateUsuarioClienteMismoPass($data) {
		$this->db->set ( 'username', $data ['usuario'] );
		$this->db->set ( 'password', $data['password']);
		$this->db->set ( 'usuario_modificacion', $data ['usuario_modificacion'] );
		$this->db->set ( 'fecha_modificacion', $data ['fecha_modificacion'] );
		$this->db->set ( 'ip', $data ['ip'] );
		$this->db->where ( 'id_usuario', $data ['id_usuario'] );
		$this->db->update ( 'usuario' );
	}
		
	/**
	 * Metodo para actualizar los datos del usuario cliente en caso se haya modificado la contraseña
	 *
	 * @author Leidy Uribe Marcos
	 */
	function updateUsuarioCliente($data) {
		$this->db->set ( 'username', $data ['usuario'] );
		$this->db->set ( 'password', md5($data['password']));
		$this->db->set ( 'usuario_modificacion', $data ['usuario_modificacion'] );
		$this->db->set ( 'fecha_modificacion', $data ['fecha_modificacion'] );
		$this->db->set ( 'ip', $data ['ip'] );
		$this->db->where ( 'id_usuario', $data ['id_usuario'] );
		$this->db->update ( 'usuario' );
	}
	
	/**
	 * Actualiza el estado de la tabla usuario segun su id
	 * @author Leidy Uribe Marcos
	 */
	function updateCuenta($data) {
	
		$this->db->set ( 'id_estado', $data ['estado_usuario'] );
		$this->db->where ( 'id_usuario', $data ['id_usuario'] );
		$this->db->update ( 'usuario' );
	}
	
	/**
	 * Actualizar estado de un usuario.
	 * 
	 * @author Fernando Esteban Valerio
	 * @param array $data
	 *        	Arreglo que contiene la información del usuario que
	 *        	será actualizado
	 */
	public function updateEstado($data) {
		$this->db->set ( 'id_estado', $data ['id_estado'] );
		$this->db->set ( 'usuario_modificacion', $data ['usuario_modificacion'] );
		$this->db->set ( 'fecha_modificacion', $data ['fecha_modificacion'] );
		$this->db->where ( 'id_usuario', $data ['id_usuario'] );
		$this->db->update ( self::STR_NOMBRE_TABLA );
	}
	
    /**
     * Obtener usuarios registrados en el sistema de acuerdo a los criterios
     * de búsqueda.
     * 
     * @author Fernando Esteban Valerio
     * @param int $tipoUsuario
     *        	Tipo Usuario
     * @param string $numRuc
     *        	Número RUC
     * @param int $tipoDoc
     *        	Tipo de documento
     * @param string $numDoc
     *        	Número de documento
     * @param string $txtDato
     *        	Valor de búsqueda
     * @param int $estado
     *        	Estado del usuario
     * @param string $fecInicio
     *        	Fecha registro inicial
     * @param string $fecFin
     *        	Fecha registro final
     * @param int $opcion
     *        	Indiciador
     * @return array
     */
    public function buscar($tipoUsuario, $numRuc, $tipoDoc, $numDoc, $txtDato, $estado, $fecInicio, $fecFin, $opcion) {
        if ($tipoUsuario == '') {
            $query = '';
            if ($opcion == '') {
                if ($estado == '' || $estado == INT_ESTADO_INACTIVO) {
                    // Solicitudes de Usuario
                    $query .= "SELECT solicitud_usuario.id_solicitud_usuario AS id,solicitud_usuario.username AS username,
                               solicitud_usuario.razon_social AS datos,solicitud_usuario.ruc AS numDoc,
                               solicitud_usuario.fecha_registro AS fecha,solicitud_usuario.estado_solicitud AS estado,
                               solicitud_usuario.id_solicitud_usuario AS id_persona," . INT_PROVEEDOR . " AS tipoUsuario
                               FROM " . self::STR_NOMBRE_TABLA_SOLICITUD_USUARIO . " LEFT JOIN " . self::STR_NOMBRE_TABLA . " ON solicitud_usuario.id_solicitud_usuario = usuario.id_solicitud_usuario 
                               WHERE solicitud_usuario.estado_solicitud = '" . INT_ESTADO_PARAM_INACTIVO . "' ";
                    if ($fecInicio != '') {
                        $query .= " AND solicitud_usuario.fecha_registro >= '" . $fecInicio . "' ";
                    }
                    if ($fecFin != '') {
                        $query .= " AND solicitud_usuario.fecha_registro <= '" . $fecFin . "' ";
                    }
                    $query .= "UNION ";
                }
                // Cliente Individual
                $query .= "SELECT usuario.id_usuario AS id,usuario.username AS username,
                           CONCAT(persona_natural.nombres,' ',persona_natural.apellidos) AS datos,
                           persona_natural.nro_documento AS numDoc,usuario.fecha_registro AS fecha,usuario.id_estado AS estado,
                           persona.id_persona AS id_persona,perfil.id_perfil AS tipoUsuario
                           FROM " . self::STR_NOMBRE_TABLA . " JOIN " . self::STR_NOMBRE_TABLA_PERSONA . " ON persona.id_persona = usuario.id_persona
                           JOIN " . self::STR_NOMBRE_TABLA_PERSONA_NATURAL . " ON persona_natural.id_persona = persona.id_persona
                           JOIN " . self::STR_NOMBRE_TABLA_USUARIO_PERFIL . " ON usuario_perfil.id_usuario = usuario.id_usuario
                           JOIN " . self::STR_NOMBRE_TABLA_PERFIL . " ON perfil.id_perfil = usuario_perfil.id_perfil
                           WHERE persona.id_tipo_cliente = '" . INT_CLIENTE_INDIVIDUAL . "' ";
                if ($estado != '') {
                    $query .= " AND usuario.id_estado = '" . $estado . "' ";
                }
                if ($fecInicio != '') {
                    $query .= " AND usuario.fecha_registro >= '" . $fecInicio . "' ";
                }
                if ($fecFin != '') {
                    $query .= " AND usuario.fecha_registro <= '" . $fecFin . "' ";
                }

                // Cliente Corporativo
                $query .= "UNION
                           SELECT usuario.id_usuario AS id,usuario.username AS username,persona_juridica.razon_social AS datos,
                           persona_juridica.ruc AS numDoc,usuario.fecha_registro AS fecha,usuario.id_estado AS estado,
                           persona.id_persona AS id_persona,perfil.id_perfil AS tipoUsuario
                           FROM " . self::STR_NOMBRE_TABLA . " JOIN " . self::STR_NOMBRE_TABLA_PERSONA . " ON persona.id_persona = usuario.id_persona
                           JOIN " . self::STR_NOMBRE_TABLA_PERSONA_JURIDICA . " ON persona_juridica.id_persona = persona.id_persona
                           JOIN " . self::STR_NOMBRE_TABLA_USUARIO_PERFIL . " ON usuario_perfil.id_usuario = usuario.id_usuario
                           JOIN " . self::STR_NOMBRE_TABLA_PERFIL . " ON perfil.id_perfil = usuario_perfil.id_perfil
                           WHERE persona.id_tipo_cliente = " . INT_CLIENTE_CORPORATIVO . " ";
                if ($estado != '') {
                    $query .= " AND usuario.id_estado = '" . $estado . "' ";
                }
                if ($fecInicio != '') {
                    $query .= " AND usuario.fecha_registro >= '" . $fecInicio . "' ";
                }
                if ($fecFin != '') {
                    $query .= " AND usuario.fecha_registro <= '" . $fecFin . "' ";
                }

                // Proveedor
                $query .= "UNION
                           SELECT usuario.id_solicitud_usuario AS id,usuario.username AS username,persona_juridica.razon_social AS datos,
                           persona_juridica.ruc AS numDoc,usuario.fecha_registro AS fecha,usuario.id_estado AS estado,
                           persona.id_persona AS id_persona,perfil.id_perfil AS tipoUsuario
                           FROM " . self::STR_NOMBRE_TABLA . " JOIN " . self::STR_NOMBRE_TABLA_PERSONA . " ON persona.id_persona = usuario.id_persona
                           JOIN " . self::STR_NOMBRE_TABLA_PERSONA_JURIDICA . " ON persona_juridica.id_persona = persona.id_persona
                           JOIN " . self::STR_NOMBRE_TABLA_USUARIO_PERFIL . " ON usuario_perfil.id_usuario = usuario.id_usuario
                           JOIN " . self::STR_NOMBRE_TABLA_PERFIL . " ON perfil.id_perfil = usuario_perfil.id_perfil
                           WHERE persona.id_tipo_cliente = " . INT_CLIENTE_PROVEEDOR . " ";
                if ($estado != '') {
                    $query .= " AND usuario.id_estado = '" . $estado . "' ";
                }
                if ($fecInicio != '') {
                    $query .= " AND usuario.fecha_registro >= '" . $fecInicio . "' ";
                }
                if ($fecFin != '') {
                    $query .= " AND usuario.fecha_registro <= '" . $fecFin . "' ";
                }                
            } else {
                // Busqueda por Nro RUC o Nombre o Razón Social
                if ($opcion == 1 || $opcion == 3) {
                    if ($estado == '' || $estado == INT_ESTADO_INACTIVO) {
                        // Solicitudes de Usuario
                        $query .= "SELECT solicitud_usuario.id_solicitud_usuario AS id,solicitud_usuario.username AS username,
                                   solicitud_usuario.razon_social AS datos,solicitud_usuario.ruc AS numDoc,
                                   solicitud_usuario.fecha_registro AS fecha,solicitud_usuario.estado_solicitud AS estado,
                                   solicitud_usuario.id_solicitud_usuario AS id_persona," . INT_PROVEEDOR . " AS tipoUsuario
                                   FROM " . self::STR_NOMBRE_TABLA_SOLICITUD_USUARIO . " LEFT JOIN " . self::STR_NOMBRE_TABLA . " ON solicitud_usuario.id_solicitud_usuario = usuario.id_solicitud_usuario 
                                   WHERE solicitud_usuario.estado_solicitud = '" . INT_ESTADO_PARAM_INACTIVO . "' ";
                        if ($numRuc != '') {
                            $query .= " AND solicitud_usuario.ruc = '" . $numRuc . "' ";
                        }
                        if ($txtDato != '') {
                            $query .= " AND solicitud_usuario.razon_social LIKE '%" . $txtDato . "%' ";
                        }
                        if ($fecInicio != '') {
                            $query .= " AND solicitud_usuario.fecha_registro >= '" . $fecInicio . "' ";
                        }
                        if ($fecFin != '') {
                            $query .= " AND solicitud_usuario.fecha_registro <= '" . $fecFin . "' ";
                        }
                        $query .= "UNION ";
                    }
                    $query .= "SELECT usuario.id_usuario AS id,usuario.username AS username,persona_juridica.razon_social AS datos,
                               persona_juridica.ruc AS numDoc,usuario.fecha_registro AS fecha,usuario.id_estado AS estado,
                               persona.id_persona AS id_persona,perfil.id_perfil AS tipoUsuario
                               FROM " . self::STR_NOMBRE_TABLA . " JOIN " . self::STR_NOMBRE_TABLA_PERSONA . " ON persona.id_persona = usuario.id_persona
                               JOIN " . self::STR_NOMBRE_TABLA_PERSONA_JURIDICA . " ON persona_juridica.id_persona = persona.id_persona
                               JOIN " . self::STR_NOMBRE_TABLA_USUARIO_PERFIL . " ON usuario_perfil.id_usuario = usuario.id_usuario
                               JOIN " . self::STR_NOMBRE_TABLA_PERFIL . " ON perfil.id_perfil = usuario_perfil.id_perfil
                               WHERE (persona.id_tipo_cliente = " . INT_CLIENTE_PROVEEDOR . " OR persona.id_tipo_cliente = " . INT_CLIENTE_CORPORATIVO . ") ";
                    if ($estado != '') {
                        $query .= " AND usuario.id_estado = '" . $estado . "' ";
                    }
                    if ($numRuc != '') {
                        $query .= " AND persona_juridica.ruc = '" . $numRuc . "' ";
                    }
                    if ($txtDato != '') {
                        $query .= " AND persona_juridica.razon_social LIKE '%" . $txtDato . "%' ";
                    }
                    if ($fecInicio != '') {
                        $query .= " AND usuario.fecha_registro >= '" . $fecInicio . "' ";
                    }
                    if ($fecFin != '') {
                        $query .= " AND usuario.fecha_registro <= '" . $fecFin . "' ";
                    }
                    $query .= "UNION 
                               SELECT solicitud_usuario.id_solicitud_usuario AS id,usuario.username AS username,persona_juridica.razon_social AS datos,
                               persona_juridica.ruc AS numDoc,usuario.fecha_registro AS fecha,solicitud_usuario.estado_solicitud AS estado,
                               persona.id_persona AS id_persona,perfil.id_perfil AS tipoUsuario
                               FROM " . self::STR_NOMBRE_TABLA . " JOIN " . self::STR_NOMBRE_TABLA_PERSONA . " ON persona.id_persona = usuario.id_persona
                               JOIN " . self::STR_NOMBRE_TABLA_PERSONA_JURIDICA . " ON persona_juridica.id_persona = persona.id_persona
                               JOIN " . self::STR_NOMBRE_TABLA_USUARIO_PERFIL . " ON usuario_perfil.id_usuario = usuario.id_usuario
                               JOIN " . self::STR_NOMBRE_TABLA_PERFIL . " ON perfil.id_perfil = usuario_perfil.id_perfil
                               JOIN " . self::STR_NOMBRE_TABLA_SOLICITUD_USUARIO . " ON solicitud_usuario.id_solicitud_usuario = usuario.id_solicitud_usuario 
                               WHERE persona.id_tipo_cliente IS NULL ";
                    if ($estado != '') {
                        $query .= " AND usuario.id_estado = '" . $estado . "' ";
                    }
                    if ($numRuc != '') {
                        $query .= " AND persona_juridica.ruc = '" . $numRuc . "' ";
                    }
                    if ($txtDato != '') {
                        $query .= " AND persona_juridica.razon_social LIKE '%" . $txtDato . "%' ";
                    }
                    if ($fecInicio != '') {
                        $query .= " AND usuario.fecha_registro >= '" . $fecInicio . "' ";
                    }
                    if ($fecFin != '') {
                        $query .= " AND usuario.fecha_registro <= '" . $fecFin . "' ";
                    }                    
                }

                // Busqueda por Tipo de Documento
                if ($opcion == 2) {
                    $query = "SELECT usuario.id_usuario AS id,usuario.username AS username,CONCAT(persona_natural.nombres,' ',persona_natural.apellidos) AS datos,
                              persona_natural.nro_documento AS numDoc,usuario.fecha_registro AS fecha,usuario.id_estado AS estado,persona.id_persona AS id_persona,
                              perfil.id_perfil AS tipoUsuario
                              FROM " . self::STR_NOMBRE_TABLA . " JOIN " . self::STR_NOMBRE_TABLA_PERSONA . " ON persona.id_persona = usuario.id_persona
                              JOIN " . self::STR_NOMBRE_TABLA_PERSONA_NATURAL . " ON persona_natural.id_persona = persona.id_persona
                              JOIN " . self::STR_NOMBRE_TABLA_USUARIO_PERFIL . " ON usuario_perfil.id_usuario = usuario.id_usuario
                              JOIN " . self::STR_NOMBRE_TABLA_PERFIL . " ON perfil.id_perfil = usuario_perfil.id_perfil
                              WHERE persona.id_tipo_cliente = " . INT_CLIENTE_INDIVIDUAL . " ";
                    if ($estado != '') {
                        $query .= "AND usuario.id_estado = '" . $estado . "' ";
                    }
                    if ($tipoDoc != '') {
                        $query .= "AND persona_natural.id_tipo_documento = '" . $tipoDoc . "' ";
                        if ($numDoc != '') {
                            $query .= "AND persona_natural.nro_documento = '" . $numDoc . "' ";
                        }
                    }
                    if ($txtDato != '') {
                        $query .= "AND (persona_natural.nombres LIKE '%" . $txtDato . "%' OR persona_natural.apellidos LIKE '%" . $txtDato . "%' ";
                    }
                    if ($fecInicio != '') {
                        $query .= "AND usuario.fecha_registro >= '" . $fecInicio . "' ";
                    }
                    if ($fecFin != '') {
                        $query .= "AND usuario.fecha_registro <= '" . $fecFin . "' ";
                    }
                }
            }
            $query = $this->db->query($query);
            return $query->result();
        }

        // Opcion: Cliente Individual
        if ($tipoUsuario == '1') {
            $this->db->select("usuario.id_usuario AS id,usuario.username AS username,persona_natural.nombres AS nombres,
                               persona_natural.apellidos AS apellidos,persona_natural.nro_documento AS numDoc,
                               usuario.fecha_registro AS fecha,usuario.id_estado AS estado,persona.id_persona AS id_persona");
            $this->db->from(self::STR_NOMBRE_TABLA);
            $this->db->join(self::STR_NOMBRE_TABLA_PERSONA, "persona.id_persona = usuario.id_persona");
            $this->db->join(self::STR_NOMBRE_TABLA_PERSONA_NATURAL, "persona_natural.id_persona = persona.id_persona");
            $this->db->join(self::STR_NOMBRE_TABLA_USUARIO_PERFIL, "usuario_perfil.id_usuario = usuario.id_usuario");
            $this->db->join(self::STR_NOMBRE_TABLA_PERFIL, "perfil.id_perfil = usuario_perfil.id_perfil");
            $this->db->where("persona.id_tipo_cliente", INT_CLIENTE_INDIVIDUAL);
            if ($estado != '') {
                $this->db->where("usuario.id_estado", $estado);
            }
            if ($opcion == 2) {
                if ($tipoDoc != '') {
                    $this->db->where("persona_natural.id_tipo_documento", $tipoDoc);
                }
                if ($numDoc != '') {
                    $this->db->where("persona_natural.nro_documento", $numDoc);
                }
            }
            if ($opcion == 3) {
                if ($txtDato != '') {
                    $this->db->like("persona_natural.nombres", $txtDato);
                    $this->db->or_like("persona_natural.apellidos", $txtDato);
                }
            }
            if ($fecInicio != '') {
                $this->db->where("usuario.fecha_registro >=", $fecInicio);
            }
            if ($fecFin != '') {
                $this->db->where("usuario.fecha_registro <=", $fecFin);
            }
            $query = $this->db->get();
            return $query->result();
        }

        // Opcion: Cliente Corporativo
        if ($tipoUsuario == '2') {
            $this->db->select("usuario.id_usuario AS id,usuario.username AS username,persona_juridica.razon_social AS razon_social,
                               persona_juridica.ruc AS ruc,usuario.fecha_registro AS fecha,usuario.id_estado AS estado,
                               persona.id_persona AS id_persona");
            $this->db->from(self::STR_NOMBRE_TABLA);
            $this->db->join(self::STR_NOMBRE_TABLA_PERSONA, "persona.id_persona = usuario.id_persona");
            $this->db->join(self::STR_NOMBRE_TABLA_PERSONA_JURIDICA, "persona_juridica.id_persona = persona.id_persona");
            $this->db->join(self::STR_NOMBRE_TABLA_USUARIO_PERFIL, "usuario_perfil.id_usuario = usuario.id_usuario");
            $this->db->join(self::STR_NOMBRE_TABLA_PERFIL, "perfil.id_perfil = usuario_perfil.id_perfil");
            $this->db->where("persona.id_tipo_cliente", INT_CLIENTE_CORPORATIVO);
            if ($estado != '') {
                $this->db->where("usuario.id_estado", $estado);
            }
            if ($opcion == 1) {
                if ($numRuc != '') {
                    $this->db->where("persona_juridica.ruc", $numRuc);
                }
            }
            if ($opcion == 3) {
                if ($txtDato != '') {
                    $this->db->like("persona_juridica.razon_social", $txtDato);
                }
            }
            if ($fecInicio != '') {
                $this->db->where("usuario.fecha_registro >=", $fecInicio);
            }
            if ($fecFin != '') {
                $this->db->where("usuario.fecha_registro <=", $fecFin);
            }
            $query = $this->db->get();
            return $query->result();
        }

        // Opcion: Proveedor
        if ($tipoUsuario == 3) {
            $query = "SELECT usuario.id_solicitud_usuario AS id,usuario.username AS username,persona_juridica.razon_social AS razon_social,
                      persona_juridica.ruc AS ruc,usuario.fecha_registro AS fecha,usuario.id_estado AS estado,persona.id_persona AS id_persona 
                      FROM " . self::STR_NOMBRE_TABLA . " JOIN " . self::STR_NOMBRE_TABLA_PERSONA . " ON persona.id_persona = usuario.id_persona 
                      JOIN " . self::STR_NOMBRE_TABLA_PERSONA_JURIDICA . " ON persona_juridica.id_persona = persona.id_persona 
                      JOIN " . self::STR_NOMBRE_TABLA_USUARIO_PERFIL . " ON usuario_perfil.id_usuario = usuario.id_usuario 
                      JOIN " . self::STR_NOMBRE_TABLA_PERFIL . " ON perfil.id_perfil = usuario_perfil.id_perfil 
                      WHERE persona.id_tipo_cliente = " . INT_CLIENTE_PROVEEDOR . " ";
            if ($estado != '') {
                $query .= "AND usuario.id_estado = '" . $estado . "' ";
            }
            if ($opcion == 1) {
                if ($numRuc != '') {
                    $query .= "AND persona_juridica.ruc = '" . $numRuc . "' ";
                }
            }
            if ($opcion == 3) {
                if ($txtDato != '') {
                    $query .= "AND persona_juridica.razon_social LIKE '%" . $txtDato . "%' ";
                }
            }
            if ($fecInicio != '') {
                $query .= "AND usuario.fecha_registro >= '" . $fecInicio . "' ";
            }
            if ($fecFin != '') {
                $query .= "AND usuario.fecha_registro <= '" . $fecFin . "' ";
            }
            if ($estado == '' || $estado == INT_ESTADO_INACTIVO) {
                $query .= "UNION
                           SELECT solicitud_usuario.id_solicitud_usuario AS id,solicitud_usuario.username AS username,               
                           solicitud_usuario.razon_social AS razon_social,solicitud_usuario.ruc AS ruc,
                           solicitud_usuario.fecha_registro AS fecha,solicitud_usuario.estado_solicitud AS estado,
                           solicitud_usuario.id_solicitud_usuario AS id_persona 
                           FROM " . self::STR_NOMBRE_TABLA_SOLICITUD_USUARIO . " LEFT JOIN " . self::STR_NOMBRE_TABLA . " ON solicitud_usuario.id_solicitud_usuario = usuario.id_solicitud_usuario 
                           WHERE solicitud_usuario.estado_solicitud = '" . INT_ESTADO_PARAM_INACTIVO . "' ";
                if ($opcion == 1) {
                    if ($numRuc != '') {
                        $query .= "AND solicitud_usuario.ruc = '" . $numRuc . "' ";
                    }
                }
                if ($opcion == 3) {
                    if ($txtDato != '') {
                        $query .= "AND solicitud_usuario.razon_social = '" . $txtDato . "' ";
                    }
                }
                if ($fecInicio != '') {
                    $query .= " AND solicitud_usuario.fecha_registro >= '" . $fecInicio . "' ";
                }
                if ($fecFin != '') {
                    $query .= " AND solicitud_usuario.fecha_registro <= '" . $fecFin . "' ";
                }
            }
            $query = $this->db->query($query);
            return $query->result();
        }
    }
    
    /**
     * Devolver el id insertado.
     * @author Fernando Esteban Valerio
     * @return int
     */
    public function getLastInserted() {
        return $this->db->insert_id();
    }

}
